跳到主要内容
最后 更新

APO 服务概览无数据排查文档

本文档用于排查 APO 平台前端无数据问题。

请优先基于第一章节《常见基础问题排查》完成后,再逐一根据您的需求选择不同章节进行排查。

常见基础问题排查

画板

  1. APO-server 与 APO-one-agent 部署完成后,且所有组件处于处于Running状态。
  2. 确认被监控服务处于APO-one-agent目标命名空间中。确认服务是否被正确的识别,APO-one-agent 会自动识别目标命名空间下的应用,如果识别成功,则会在该服务 poddeployment 资源中打上odigos-instrumentation=enabledlabel
    1. 这里如果您预期监控服务的Deployment资源中没有odigos-instrumentation=enabled这个label,请根据《如何修改 Kubernets 版本 APO-one-agent 自动注入监控范围》章节进行修改。
  3. 若服务是在 APO-one-agent 部署完成后部署,则需要等待服务第一次启动完成后,再重启应用,才能注入监控配置。
  4. 若服务是在 APO-one-agent 部署前已经在环境中运行,则在 APO-one-agent 部署成功后,手动重启应用完成监控配置注入。
  5. 确认注入监控配置的服务有请求,以产生Trace数据。
  6. 确认 APO 前端右上角时间选择器选择了最新时间。APO-server 第一次部署成功后,APO 组件 pod 处于 running 状态,但是内部可能还在初始化,请等待3分钟左右,选择前端右上角的时间选择器,选择最近5分钟。同时监控数据产生到前端显示有延迟,预期在1分钟以内。

Java 应用是否成功注入监控配置

本节基于第一章节《常见基础问题排查》完成后,前端依然没有显示 JAVA 应用监控数据为前提。

APO-one-agent 内置 JAVA 默认采集探针版本:opentelemetry-java-instrumentation v2.8.0

排查流程:

  1. 这里如果JAVA应用本身配置就配置过 skywalking 或者 otel 等Trace探针,可能会产生冲突,建议删除原本的 Trace 探针配置。
  2. K8s环境中,重启JAVA应用后,进入JAVA服务pod内部执行命令env | grep JAVA_TOOL_OPTIONSenv | grep OTEL_EXPORTER_OTLP_ENDPOINT预期输出JAVA_TOOL_OPTIONS=-javaagent:/var/odigos/java/javaagent.jarOTEL_EXPORTER_OTLP_ENDPOINT=http://<nodeIP>:4317,这里nodeIP为该pod所在节点IP。
    1. 如果这里没有输出预期环境变量,您可能遇到了意料之外的问题,《联系我们》协助您进行排查
  3. 虚机环境中,执行java --version,预期会看到类似输出Picked up JAVA_TOOL_OPTIONS: -javaagent:/etc/apo/instrument/agent/java/opentelemetry/v2.5.0/opentelemetry-javaagent.jar
    1. 如果这里没有预期类似输出,您可能遇到了意料之外的问题,请《联系我们》协助您进行排查

Go 应用是否成功注入监控配置

本节基于第一章节《常见基础问题排查》完成后,前端依然没有显示 Go 应用监控数据为前提。

APO-one-agent 内置 Go 默认采集探针版本:opentelemetry-go-instrumentation v0.13.0-alpha

请确认您的 Go 版本在默认版本的兼容范围内。

  • 内核版本为 4.19 或更高版本的 Linux
  • Go 1.18 或更高版本

排查流程:

  1. K8s环境中,检查您的 Go 待监控服务所在节点的 APO-one-agent 组件中的 go-sdk-auto 容器日志,输入命令kubectl logs apo-one-agent-xxxxx -c go-sdk-auto -n apo 查询Error级别的日志查询失败原因。
    1. 如果这里没有预期错误输出,您可能遇到了意料之外的问题,请《联系我们》协助您进行排查

NodeJS 应用是否成功注入监控配置

本节基于第一章节《常见基础问题排查》完成后,前端依然没有显示 Go 应用监控数据为前提。

APO-one-agent 内置 NodeJS 默认采集探针版本:opentelemetry-js v1.24.1/0.51.1

请确认您的 NodeJS 版本在默认版本的兼容范围内。

Python 应用是否成功注入监控配置

本节基于第一章节《常见基础问题排查》完成后,前端依然没有显示 Go 应用监控数据为前提。

APO-one-agent 内置 Python 默认采集探针版本:opentelemetry-python 1.23.0/0.44b0

请确认您的 Python 版本在默认版本的兼容范围内。

如何修改 Kubernets 版本 APO-one-agent 自动注入监控范围

有两种方法可以修改 APO-one-agent 的自动注入监控范围:

方法一:

假如您已经将 APO-one-agent 部署完成,可以使用helm upgrade命令更新您的部署配置。

注意: helm upgrade会初始化所有非Helm方式修改的配置。

  • 如果您是使用《快速开始》文档部署的 APO-one-agent,则修改您的apo-values.yaml中16~36行的代码来适配您的环境:
# APO-server 
# 持久化配置,推荐打开,默认为false
# 如果为持久化配置则需要根据PVC为 clickhouse 与 victoria-metrics 创建PV
altinity-clickhouse-operator:
clickhouse:
persistence:
enabled: true
victoria-metrics-single:
server:
persistentVolume:
enabled: true

# APO-one-agent
apo-one-agent:
enabled: true
odigos:
instrumentor:
# targetNamespace
# name:目标命名空间
# value:
# enabled: 注入现有的所有服务,但不注入后续新增应用
# enabledFuture: 注入现在以及后续的所有服务
# disabled: 不注入指定namespace下的服务,用于在instrument-all-namespace时忽略特定的Namespace
targetNamespace:
- name: default
value: enabledFuture
- name: default2
value: enabled
# instrument-all-namespace 是否注入所有namespace
# 等价于设置所有namespace的enabledFuture
# 但如果已经设置了ns或者workload的disabled将不会注入
instrumentAllNamespace: false
# force-instrument-all-namespace 是否强制注入所有namespace
# 和instrument-all-namespace类似,所有ns设置enabledFuture
# 并忽略所有disabled设置
forceInstrumentAllNamespace: false

更新完并保存您的配置文件后,使用下方命令来更新探针

helm upgrade apo apo/apo -n apo \
-f apo-values.yaml
  • 如果您是使用《监控 Kubernetes 集群中的服务器和应用使用OneAgent默认OTEL探针版本》或《监控 Kubernetes 集群的服务器和应用使用OneAgent定制探针版本》文档部署的 APO-one-agent,则修改您的apo-one-agent-values.yaml中6~28行的代码来适配您的环境:
# apoServerIP 为 APO-server 所在的 ClusterIP
global:
apoServerIP: x.x.x.x # FIXME

# APO-one-agent enabled标志位,默认为 false
odigos:
instrumentor:
# targetNamespace
# name:目标命名空间
# value:
# enabled: 注入现有的所有服务,但不注入后续新增应用
# enabledFuture: 注入现在以及后续的所有服务
# disabled: 不注入指定namespace下的服务,用于在instrument-all-namespace时忽略特定的Namespace
targetNamespace:
- name: default
value: enabledFuture
- name: default2
value: enabled
- name: default3
value: disabled
# instrument-all-namespace 是否注入所有namespace
# 等价于设置所有namespace的enabledFuture
# 但如果已经设置了ns或者workload的disabled将不会注入
instrumentAllNamespace: false
# force-instrument-all-namespace 是否强制注入所有namespace
# 和instrument-all-namespace类似,所有ns设置enabledFuture
# 并忽略所有disabled设置
forceInstrumentAllNamespace: false

更新完并保存您的配置文件后,使用下方命令来更新探针

helm upgrade apo-one-agent apo/apo-one-agent -n apo \
-f apo-one-agent-values.yaml

方法二:

假如您已经将 APO-one-agent 部署完成,且不想使用helm upgrade来更新配置。

则需要手动修改 APO-one-agent 组件配置,在您安装 APO-one-agent 的集群中,执行下方命令

kubectl edit cm apo-instrumentor-config -n apo

预期输出下方内容,修改其中35~65行的代码来适配您的环境:

apiVersion: v1
kind: ConfigMap
metadata:
name: apo-instrumentor-config
namespace: apo
uid: xxxxxxxxxxxxxxxxxx
resourceVersion: 'xxxxxx'
creationTimestamp: 'xxxxxxxxxxxxxxxxxxx'
labels:
app.kubernetes.io/managed-by: Helm
annotations:
meta.helm.sh/release-name: apo
meta.helm.sh/release-namespace: apo
managedFields:
- manager: helm
operation: Update
apiVersion: v1
time: 'xxxxxxxxxxxxxxxxxx'
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:instrument-conf.yaml: {}
f:metadata:
f:annotations:
.: {}
f:meta.helm.sh/release-name: {}
f:meta.helm.sh/release-namespace: {}
f:labels:
.: {}
f:app.kubernetes.io/managed-by: {}
selfLink: /api/v1/namespaces/apo/configmaps/apo-instrumentor-config
data:
instrument-conf.yaml: |
# 目前下面任何设置都绝对不会操作kube-system这个namespace

# 设置需要注入的Namespace
# enabled: 注入现有的所有服务,但不注入后续新增应用
# enabledFuture: 注入现在以及后续的所有服务
# disabled: 不注入指定namespace下的服务,用于在instrument-all-namespace时忽略特定的Namespace
# e.g
# namespace:
# train-ticket: enabledFuture
# originx: enabled
namespace:
default: enabledFuture
default2: enabled

# 设置namespace下需要注入的工作负载
# 优先级高于namespace中的设置,可以通常用于开启对特定workload的注入或者注入namespace时忽略特定的workload
# e.g
workload:
apo:
deployment/apo-java-demo: enabled
# default:
# deploymen/demo: disabled

# instrument-all-namespace 是否注入所有namespace
# 等价于设置所有namespace的enabledFuture
# 但如果已经设置了ns或者workload的disabled将不会注入
instrument-all-namespace: false
# force-instrument-all-namespace 是否强制注入所有namespace
# 和instrument-all-namespace类似,所有ns设置enabledFuture
# 并忽略所有disabled设置
force-instrument-all-namespace: false

保存您的修改后,使用下方命令重启组件生效:

kubectl rollout restart deployment apo-odigos-instrumentor -n apo

联系我们

如果您在排查中遇到任何预料之外的问题,可以通过官方渠道联系我们,我们将尽快为您提供帮助。